<?php
// +-----------------------------------------------------------------------+
// |                                                                       |
// | WebFormsQA     (Question - Answer)                                    |
// | Copyright  (C) 2010                                                   |
// | Official site  www.scale-tech.ru                                      |
// | email          scale-tech@mail.ru                                     |
// | autor          Alexander Demachev                                     |
// |                                                                       |
// | This program is free software; you can redistribute it and/or modify  |
// | it under the terms of the GNU General Public License as published by  |
// | the Free Software Foundation; version 2 of the License.               |
// |                                                                       |
// | This program is distributed in the hope that it will be useful,       |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of        |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
// | GNU General Public License for more details.                          |
// +-----------------------------------------------------------------------+

/**
 * @file database.test.php
 * @brief файл содержит код для тестирования класса Database \n
 * @include database.test.php
 */

/*! @addtogroup TestWebFormsQA Tестирование проекта WebFormsQA
 *  Группа включает классы для тестирования исходного кода
 *  @{
 */


/**
 * @class DatabaseTest
 * @brief Класс предназначен для проверки методов класса Database \n
 *        Исходный код [ @ref database.test.php ] 
 */
class DatabaseTest extends PHPUnit_TestCase {

    /** Функция проверяет соединение с базой данных */
    function testConnectBase()
    {
        $base = new DataBase(DB_HOST, DB_USER, DB_PASS, TEST_DB_NAME);
        $this->assertTrue($base->Init(), 'not init'.TEST_DB_NAME.' base');
        
    } // end testMakeBase

    /**
     * @brief Метод проверяет формирование строки запроса для условия WHERE ввиде простых операций AND или OR
     * @code
     * например:    ID='1' OR ID='2' OR ID='3'
     *              ID='1' AND ID='2' AND ID='3'
     * @endcode
     * тестируется метод Database::getRequest()
     */
    function testGetRequest()
    {
        $base = new DataBase(DB_HOST, DB_USER, DB_PASS, TEST_DB_NAME);
        $this->assertTrue($base->Init(), 'not init'.TEST_DB_NAME.' base');

        // необходим простой запрос по AND
        $idx    = array('1', '2', '3');
        $etalon = "ID='1' AND ID='2' AND ID='3'";

        $this->assertTrue($base->getRequest('ID', $idx, $out));
        $this->assertEquals($etalon, $out);

        // необходим простой запрос по OR
        $idx    = array('3', '4');
        $etalon = "ID='3' OR ID='4'";
        $this->assertTrue($base->getRequest('ID', $idx, $out, false));
        $this->assertEquals($etalon, $out);

        $idx    = array('5');
        $etalon = "ID='5'";
        $this->assertTrue($base->getRequest('ID', $idx, $out, false));
        $this->assertEquals($etalon, $out);

        // нет входных данных
        $idx    = array();
        $this->assertFalse($base->getRequest('ID', $idx, $out, false));

    } // testGetRequest

} // end class DatabaseTest

/*! @} */

?>
